<?php
//   +----------------------------------------------------------------------
//   | Copyright (c) 2015-2025 http://www.hdphp.cn All rights reserved.
//   | Licensed ( http://www.hdphp.cn/licenses/ )
//   | Author: Jack <sophia2152@qq.com>
//   | 官方网址: http://www.hdphp.cn
//   | 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和使用。
//   | 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
//   +----------------------------------------------------------------------
namespace hdphp\basic;

use think\facade\Config;

/**
 * Class：BaseMessage
 * 创建人：Jack
 * 创建时间：2023/11/30 10:56
 * @package hdphp\basic
 */
abstract class BaseMessage extends BaseStorage
{
    /**
     * 模板id
     * @var array
     */
    protected $templateIds = [];

    /**
     * openId
     * @var string
     */
    protected $openId;

    /**
     * 跳转链接
     * @var string
     */
    protected $toUrl;

    /**
     * 颜色
     * @var string
     */
    protected $color;

    /**
     * 注释：初始化
     * 创建人：Jack
     * 创建时间：2023/11/30 10:56
     * @param array $config
     * @return void
     */
    protected function initialize(array $config)
    {
        $this->templateIds = Config::get($this->configFile . '.stores.' . $this->name . '.template_id', []);
    }

    /**
     * 注释：是否记录日志
     * 创建人：Jack
     * 创建时间：2023/11/30 10:56
     * @return mixed
     */
    public function isLog()
    {
        $isLog = Config::get($this->configFile . 'isLog', false);
        return Config::get($this->configFile . '.stores.' . $this->name . '.isLog', $isLog);
    }

    /**
     * 注释：获取模板id
     * 创建人：Jack
     * 创建时间：2023/11/30 10:56
     * @return array
     */
    public function getTemplateId()
    {
        return $this->templateIds;
    }

    /**
     * 注释：openid
     * 创建人：Jack
     * 创建时间：2023/11/30 10:57
     * @param string $openId
     * @return $this
     */
    public function to(string $openId)
    {
        $this->openId = $openId;
        return $this;
    }

    /**
     * 注释：跳转路径
     * 创建人：Jack
     * 创建时间：2023/11/30 10:57
     * @param string $url
     * @return $this
     */
    public function url(string $url)
    {
        $this->toUrl = $url;
        return $this;
    }

    /**
     * 注释：设置背景颜色
     * 创建人：Jack
     * 创建时间：2023/11/30 10:57
     * @param string|null $color
     * @return $this
     */
    public function color(?string $color)
    {
        $this->color = $color;
        return $this;
    }

    /**
     * 注释：提取模板code
     * 创建人：Jack
     * 创建时间：2023/11/30 10:57
     * @param string $templateId
     * @return mixed|null
     */
    protected function getTemplateCode(string $templateId)
    {
        return $this->templateIds[$templateId] ?? null;
    }

    /**
     * 注释：恢复默认值
     * 创建人：Jack
     * 创建时间：2023/11/30 10:57
     * @return void
     */
    protected function clear()
    {
        $this->openId = null;
        $this->toUrl = null;
        $this->color = null;
    }

    /**
     * 注释：发送消息
     * 创建人：Jack
     * 创建时间：2023/11/30 10:57
     * @param string $templateId
     * @param array  $data
     * @return mixed
     */
    abstract public function send(string $templateId, array $data = []);

    /**
     * 注释：添加模板
     * 创建人：Jack
     * 创建时间：2023/11/30 10:57
     * @param string $shortId
     * @return mixed
     */
    abstract public function add(string $shortId);

    /**
     * 注释：删除模板
     * 创建人：Jack
     * 创建时间：2023/11/30 10:57
     * @param string $templateId
     * @return mixed
     */
    abstract public function delete(string $templateId);

    /**
     * 注释：获取所有模板
     * 创建人：Jack
     * 创建时间：2023/11/30 10:57
     * @return mixed
     */
    abstract public function list();

}